On conventional multiprocessor systems running standard operating systems, multithreaded applications are nominally multiprocessor-exploitive because the threads of the application are assigned to individual processors that can run them concurrently. However, the degree to which a multithreaded program is actually multiprocessor-exploitive may vary depending on the design of the application itself.
Unfortunately, such a multithreaded program may fail when individual threads of the program block a resource and prevent other threads from operating, thus allowing one or more processors to idle while useful computations could have occurred. If runtime analysis determines that the protection of a resource is unnecessary (i.e., unsuitable) during execution (e.g., because only one thread accesses the protected resource), then this unsuitability could be indicated to the software developer.